Ranking of Address Book Contacts Based on Social Proximity

ABSTRACT

In one embodiment, a user of a social networking system requests to look up an address book maintained by the social networking system. The social networking system improves the look up search results by ranking one or more contacts in the address book based on social graph, social relationship and communication history information.

PRIORITY

This application is a continuation under 35 U.S.C. §120 of U.S. patentapplication Ser. No. 12/972,279, filed 17 Dec. 2010, which isincorporated herein by reference.

TECHNICAL FIELD

The present disclosure relates generally to a social network serviceand, more particularly, to ranking a user's address book contacts basedon social graph information and observed interaction between the userand the address book contacts.

BACKGROUND

A social networking system, such as a social networking website, enablesits users to interact with it and with each other through the system.The social networking system may create and store a record, oftenreferred to as a user profile, in connection with the user. The userprofile may include a user's demographic information, communicationchannel information, and personal interest. The social networking systemmay also create and store a record of a user's relationship with otherusers in the social networking system (e.g., social graph), as well asprovide services (e.g., wall-posts, photo-sharing, or instant messaging)to facilitate social interaction between users in the social networkingsystem. For example, a user of a social networking website can access anaddress book stored in the social networking website, look up a contactin the address book and connect with the contact through email.

SUMMARY

Particular embodiments relate to adjusting the displayed location ororder of contacts in an address book based on social graph andcommunication history information. These and other features, aspects,and advantages of the disclosure are described in more detail below inthe detailed description and in conjunction with the following figures.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates an example social networking system.

FIG. 2 illustrates an example method of ranking contacts in an addressbook based on social proximity.

FIG. 3 illustrates an example of generating closeness coefficients.

FIG. 4 illustrates an example of presenting to a requesting user acontacts list as sorted by closeness coefficients.

FIG. 5 illustrates an example network environment.

FIG. 6 illustrates an example computer system.

DETAILED DESCRIPTION

The invention is now described in detail with reference to a fewembodiments thereof as illustrated in the accompanying drawings. In thefollowing description, numerous specific details are set forth in orderto provide a thorough understanding of the present disclosure. It isapparent, however, to one skilled in the art, that the presentdisclosure may be practiced without some or all of these specificdetails. In other instances, well known process steps and/or structureshave not been described in detail in order not to unnecessarily obscurethe present disclosure. In addition, while the disclosure is describedin conjunction with the particular embodiments, it should be understoodthat this description is not intended to limit the disclosure to thedescribed embodiments. To the contrary, the description is intended tocover alternatives, modifications, and equivalents as may be includedwithin the spirit and scope of the disclosure as defined by the appendedclaims.

A social networking system, such as a social networking website, enablesits users to interact with it, and with each other through, the system.Typically, to become a registered user of a social networking system, anentity, either human or non-human, registers for an account with thesocial networking system. Thereafter, the registered user may log intothe social networking system via an account by providing, for example, acorrect login ID or username and password. As used herein, a “user” maybe an individual (human user), an entity (e.g., an enterprise, business,or third party application), or a group (e.g., of individuals orentities) that interacts or communicates with or over such a socialnetwork environment.

When a user registers for an account with a social networking system,the social networking system may create and store a record, oftenreferred to as a “user profile”, in connection with the user. The userprofile may include information provided by the user and informationgathered by various systems, including the social networking system,relating to activities or actions of the user. For example, the user mayprovide his name, contact information, birth date, gender, maritalstatus, family status, employment, education background, preferences,interests, and other demographical information to be included in hisuser profile. The user may identify other users of the social networkingsystem that the user considers to be his friends. A list of the user'sfriends or first degree contacts may be included in the user's profile.Connections in social networking systems may be in both directions ormay be in just one direction. For example, if Bob and Joe are both usersand connect with each another, Bob and Joe are each connections of theother. If, on the other hand, Bob wishes to connect to Sam to view Sam'sposted content items, but Sam does not choose to connect to Bob, aone-way connection may be formed where Sam is Bob's connection, but Bobis not Sam's connection. Some embodiments of a social networking systemallow the connection to be indirect via one or more levels ofconnections (e.g., friends of friends). Connections may be addedexplicitly by a user, for example, the user selecting a particular otheruser to be a friend, or automatically created by the social networkingsystem based on common characteristics of the users (e.g., users who arealumni of the same educational institution). The user may identify orbookmark websites or web pages he visits frequently and these websitesor web pages may be included in the user's profile.

The user may provide information relating to various aspects of the user(such as contact information and interests) at the time the userregisters for an account or at a later time. The user may also updatehis or her profile information at any time. For example, when the usermoves, or changes a phone number, he may update his contact information.Additionally, the user's interests may change as time passes, and theuser may update his interests in his profile from time to time. A user'sactivities on the social networking system, such as frequency ofaccessing particular information on the system, may also provideinformation that may be included in the user's profile. Again, suchinformation may be updated from time to time to reflect the user'smost-recent activities. Still further, other users or so-called friendsor contacts of the user may also perform activities that affect or causeupdates to a user's profile. For example, a contact may add the user asa friend (or remove the user as a friend). A contact may also writemessages to the user's profile pages—typically known as wall-posts.

A social network system may maintain social graph information, which canbe generally defined by the relationships among groups of individuals,and may include relationships ranging from casual acquaintances to closefamilial bonds. A social network may be represented using a graphstructure. Each node of the graph corresponds to a member of the socialnetwork. Edges connecting two nodes represent a relationship between twousers. In addition, the degree of separation between any two nodes isdefined as the minimum number of hops required to traverse the graphfrom one node to the other. A degree of separation between two users canbe considered a measure of relatedness between the two users representedby the nodes in the graph.

A user may or may not wish to share his information with other users orthird-party applications, or a user may wish to share his informationonly with specific users or third-party applications. A user may controlwhether his information is shared with other users or third-partyapplications through privacy settings associated with his user profile.For example, a user may select a privacy setting for each user datumassociated with the user. The privacy setting defines, or identifies,the set of entities (e.g., other users, connections of the user, friendsof friends, or third party application) that may have access to the userdatum. The privacy setting may be specified on various levels ofgranularity, such as by specifying particular entities in the socialnetwork (e.g., other users), predefined groups of the user'sconnections, a particular type of connections, all of the user'sconnections, all first-degree connections of the user's connections, theentire social network, or even the entire Internet (e.g., to make theposted content item index-able and searchable on the Internet). A usermay choose a default privacy setting for all user data that is to beposted. Additionally, a user may specifically exclude certain entitiesfrom viewing a user datum or a particular type of user data.

In addition to user profile information, the social networking systemmay track or maintain other information on or outside the socialnetworking system about the user. For example, a geo-social networkingsystem is a social networking system hosts one or more location-basedservices that record the user's location. For example, users may accessthe geo-social networking system using a special-purpose clientapplication hosted by a mobile device of the user. The clientapplication may automatically access Global Positioning System (GPS) orother geo-location functions supported by the mobile device and reportthe user's current location to the geo-social networking system. Inaddition, the client application may support geo-social networkingfunctionality that allows users to check-in at various locations andcommunicate this location to other users. For example, social networksystem may post information describing a user's check-in to the user'sprofile page, which may cause the information to be included innewsfeeds of other users of the social networking system. In otherimplementations, the social networking system may add the information tosuch news feeds without posting it to a user profile page. The user mayalso add, delete or update events that the user is associated with. Forexample, a user may update a social event associated with a time anddate that the user is planning to attend, or make comments in hiswall-posts about a past event he attended.

Additionally, social networking system may provide various communicationchannels for users to interact with each other. Thus, users of a socialnetworking system may interact with each other by sending and receivingcontent items of various types of media through the communicationchannels. In particular embodiments, communication channels may include,but are not limited to, email, instant messaging (IM), text, voice orvideo chat, and wall posts. A user of the social networking system mayalso interact through various communication channels outside the socialnetworking system with another person (a user or non-user of the socialnetworking system). Examples of those communication channels are phonecall though public switched telephone network (PSTN) or the Internet(e.g., VOIP or voice over internet protocol), text, voice or video chat,SMS (short message service) text messaging, instant messaging, andemail. To keep track of communication channel information, a user of thesocial networking system may keep one or more address books. An addressbook may contain one or more contacts (e.g., a person or a businessidentify) and for each contact, communication channel information forthe contact (e.g., a phone number, a user ID for an IM service, an emailaddress, a user ID for a social networking system, home address, etc.).A user of the social networking system may keep the one or more addressbooks inside or outside the social networking system. For example, thesocial networking system may maintain an address book for a user, andthe user can access the address book though the social networkingsystem's web site, or through a client application hosted by a clientdevice 122. For example, a user may keep an address book in a clientapplication hosted by the user's personal computer (e.g., MicrosoftOutlook) or keep an address book in a native address book applicationsupported by the user's mobile phone. For example, a user may keep anaddress book hosted over the Internet by a remote server (i.e., theaddress book is hosted “in the cloud”) and access the address book via aweb browser on a client device 122. The social networking system and theclient device 122 may also include functionality that allowssynchronization of address book contact information. For example, a usermay keep an address book in a client application hosted by the user'spersonal computer (e.g., Microsoft Outlook) or keep an address book in anative address book application supported by the user's mobile phone.For example, a user may keep an address book hosted over the Internet bya remote server (i.e., the address book is hosted “in the cloud”) andaccess the address book via a web browser on a client device 122. Inother implementations, an address book database may be synchronizedbetween the client device 122 and the social network system.

FIG. 1 illustrates an example social networking system. In particularembodiments, the social networking system may store user profile dataand social graph information in user profile database 101. In particularembodiments, the social networking system may store user event data inevent database 102. In particular embodiments, the social networkingsystem may store user privacy policy data in privacy policy database103. In particular embodiments, the social networking system may storegeographic and location data in location database 104. In particularembodiments, databases 101, 102, 103, and 104 may be operably connectedto the social networking system's front end 120. In particularembodiments, the front end 120 may interact with client device 122through network cloud 121. Client device 122 is generally a computer orcomputing device including functionality for communicating (e.g.,remotely) over a computer network. Client device 122 may be a desktopcomputer, laptop computer, personal digital assistant (PDA), in- orout-of-car navigation system, smart phone or other cellular or mobilephone, or mobile gaming device, among other suitable computing devices.Client device 122 may execute one or more client applications, such as aweb browser (e.g., Microsoft Windows Internet Explorer, Mozilla Firefox,Apple Safari, Google Chrome, and Opera, etc.), to access and viewcontent over a computer network. Front end 120 may include web or HTTPserver functionality, as well as other functionality, to allow users toaccess the social networking system. Network cloud 121 generallyrepresents a network or collection of networks (such as the Internet ora corporate intranet, or a combination of both) over which clientdevices 122 may access the social network system.

In particular embodiments, user profile database 101 may storecommunication channel information and an address book of a user. Theaddress book, in one implementation, may be a superset or a subset ofthe users of the social networking system that a user has established afriend or contact relationship. A user of client device 122 may accessthis address book information using a special purpose or general purposeclient application to view contact information. In particularembodiments, the address book may contain one or more contacts (e.g. aperson or an business entity), and communication channel information foreach contact (e.g., a phone number, a user ID for an IM service, anemail address, a user ID for a social networking system, web addresss,home address, etc.). In particular embodiments, a user may access theaddress book, look up and connect to a contact through a communicationchannel. Ordinarily, when a person looks up an address book, the addressbook such as a native address book on a mobile phone often listscontacts by names alphabetically, but the contacts listed first may notbe the most relevant. For example, when John looks up the address bookin his mobile phone, his college friend “Andrew Adams” may always comeup first even though John has not contacted Andrew Adams for 6 months.In addition, when a user selects another segment of an address book,such as contacts with last names starting with “D,” the same situationmay occur—that is, a less relevant contact may be listed first simplybecause of the alphabetical sorting utilized by most address bookapplications. Particular embodiments below describe methods in improvinglisting by an address book by ranking contacts in the address book basedon social proximity.

FIG. 2 illustrates an example method of ranking contacts in an addressbook based on social proximity. FIG. 2 can be implemented by acontact-listing process hosted on one or more computing devices that canaccess the social networking system. In particular embodiments, thesocial networking system may store an address book of a user in userprofile database 101. In particular embodiments, the address book maycomprise one or more contacts. In particular embodiments, each contactof the one or more contacts in the address book may comprise a name andcommunication channel information. In particular embodiments, the nameof a contact in the address book may be a name (including a first,middle, and/or last name) and/or a user ID corresponding to the contactin the social networking system (such as an open or universal useridentifier) or a URL of a page associated with the contact. In oneimplementation, social graph information corresponding to contacts mayalso be stores, such as a relationship type identifier (e.g., marriedto, sister of, etc.) between the user and the contact, an affinity scorebetween the user and the contact, the occupation of the contact, theeducation history of the contact, and the interests and activities ofthe contact. In one embodiment, the communication channel information inthe address book may comprise communication channel data, wherein thecommunication channel data comprise communication channel typeidentifiers (e.g., email, work phone number, cell phone number, IMusername, a group or chat room, home phone number, URL, etc.) and avalue of the communication channel type identifier (e.g., joe@yahoo.com,650.555.1212, www.facebook.com/joey, etc.). In particular embodiments,the contact-listing process may receive a request from a user to look upthe user's address book (200). In particular embodiments, thecontact-listing process may access the requesting user's address bookstored in user profile database 101 and create a contacts list from theaddress book (201). In particular embodiments, the contacts list maycomprise one or more names of one or more contacts of the requestinguser's address book.

In particular embodiments, the contact-listing process may obtain socialgraph information for each contact in the contacts list (202). Forexample, the contact-listing process may access user profile database101 and determine a degree of separation in the social graph from therequesting user for each contact in the contacts list. In particularembodiments, the contact-listing process may assign a coefficient foreach degree of separation. For example, the contact-listing process canassign a degree of separation coefficient of 1.0 for one degree ofseparation (i.e., a contact is the requesting user's friend), acoefficient of 0.5 for two degrees of separation (i.e., a contact is therequesting user's friend's friend), a coefficient of 0.33 for threedegrees of separation, etc. Other degree of separation coefficientvalues can be assigned for various degrees of separation. For example, acoefficient of 0.5 can be assigned to contacts that are one degreeseparated from the requesting user, while a coefficient of 0.33 can beassigned to contacts that are two degrees separated. In particularembodiments, the contact-listing process may assign a default degree ofseparation coefficient for a contact who is not part of the socialnetwork. For example, the contact-listing process can assign a degree ofseparation coefficient of 0.2 for a contact who is not part of thesocial networking system. Still further, these coefficients can beadjusted or modified based on other attributes, such as an affinityscore between the requesting user and a contact. In one implementation,an affinity score can be based the communication frequency between usersand include on one or more of the following attributes: 1) the number ofdays the users have communicated with each other over a given period oftime, 2) the number of comments made to wall posts of either user, 3)the number of times each user has viewed the user profile of the otheruser, 4) the number of pokes between users, 5) the number of messagesbetween the users, 6) the number of wall posts between the users, 7) thenumber of comments to wall posts shared between the users, 8) the numberof likes the users have in common, 9) the number of photographs in whichboth users have been tagged, and 9) the number of photos and/or albumsof one user the other user has viewed. A system for measuring useraffinity is described more generally in U.S. patent application Ser. No.11/503,093, filed on Aug. 11, 2006, which is hereby incorporated byreference in its entirety and for all purposes.

The contact-listing process may also consider additional relationshipattributes either to adjust an initial degree of separation coefficientscore that is based on degrees of separation or to compute an additionalaffiliation or relationship coefficient score. For example, thecontact-listing process may consider declared relationships betweenusers in the social networking system (e.g., “married to”, “sibling of”,“in a relationship with”, etc.). For example, the contact-listingprocess may consider embedded social relationships in communicationsbetween a contact and the requesting user, such as text stringsreflecting social proximity (e.g. “Mom”, “Dad” in emails or SMS textmessages). In other implementations, the contact listing process mayalso consider whether the contact is an actual person or an entity (suchas an enterprise or organization). In particular embodiments, thecontact-listing process may acquire declared social relationshipinformation and embedded social relationships for each contact in thecontacts list to compute an affiliation coefficient score for eachcontact (203). In particular embodiments, the contact-listing processmay rank contacts in the contacts list by each contact's affiliationwith the requesting user, or how close in social relationship betweeneach contact of the contacts list and the requesting user. For example,the contact-listing process can assign an affiliation coefficient of 1.0if a contact in the contacts list is the user's parent, wife/husband, orsibling, or an affiliation coefficient of 0.7 if the contact in thecontacts list is a friend of friend of the user, and the contact and theuser went to the same college at the same time, or a default affiliationcoefficient of 0.5 if a contact in the contacts list has no declared orembedded social relationship with the user, or the contact has no knownspatial and/or temporal closeness to the user. A system for measuringuser affinity is described more generally in U.S. patent applicationSer. No. 11/503,093, filed on Aug. 11, 2006, which is herebyincorporated by reference in its entirety and for all purposes.

In particular embodiments, the contact-listing process may access userprofile database 101 to compile communication history informationbetween the requesting user and each contact in the contacts list inorder to generate a communication history coefficient score (204). Inparticular embodiments, a user's communication history may comprisefrequency information for each communication channel in the inboundand/or outbound directions with each contact in the user's address book,as well as other individuals within and/or outside the social network.For example, a user's communication history can store information suchas the number of emails, instant messages, texts, etc sent/receivedbetween one or more contacts/social proximity groups (e.g., family,friends, second-degree friends, etc.), the number of text messagessent/received between one or more contacts/social proximity groups, thenumber of phone calls sent/received between one or more contacts/socialproximity groups, and the like. In some implementations, the clientdevice 122, such as a mobile device may be configured to periodicallyupload log data that can be processed by the social networking system togenerate this information. In some implementations, the communicationhistory data may be raw or log data that is processed to yield thesestatistics. In other implementations, a data mining process mayperiodically analyze the log data and maintain the above-identifiedcounts over various slide time intervals. In some implementations, alocal process executing on the client device 122 can process thisinformation and generate statistical data for use by the socialnetworking system. In particular embodiments, a connection between auser and another person may cause updates to the user's communicationhistory accordingly. For example, a user can look up a contact in theuser's address book by accessing a client application hosted on theuser's mobile phone, call the contact by a phone number listed in theaddress book, and the client application updates the user'scommunication history for the contact accordingly (e.g., incrementingoutbound call frequency for the contact/social proximity group by 1).For example, a user may receive an SMS text message from a contact on aclient application hosted by the user's mobile phone, and the clientapplication can update the user's communication history for the contactaccordingly (e.g., incrementing inbound SMS frequency for the contact by1).

In particular embodiments, the contact-listing process may generate acloseness coefficient for each contact in the contacts list based on thesocial graph information (e.g., a degree of separation coefficient), thesocial relationship information (e.g., an affiliation coefficient), andthe communication history information (e.g., a communication historycoefficient) (205). In particular embodiments, the contact-listingprocess may present the contacts list as sorted by closenesscoefficients (206). In particular embodiments, the contact-listingprocess may store the closeness coefficients in user profile database101.

FIG. 3 illustrates an example process flow for generating closenesscoefficients. In particular embodiments, the contact-listing process mayassemble social graph information arranged in a table of degree ofseparation coefficients (301), social relationship information arrangedin a table of affiliation coefficients (302), and communication historyinformation arranged in a table of communication frequency for eachcontact (303). In the example of 303, communication frequency of aparticular communication channel can be expressed as count values fordifferent contacts and communications channels. For example, 20 of thephone calls in the past 30 days made or received by the user are with acontact named Andy, another 8 of the phone calls in the past 30 daysoccurred between the subject user and a contact identified as Mom. AsFIG. 3 illustrates, other count values may be maintained for othercommunications channels. In particular embodiments, the contact-listingprocess may assign different weightings for different communicationchannels when generating closeness coefficients. For example, thecontact-listing process can assign a weighting of 1.0 for phone call,0.8 for chat, 0.6 for SMS, 0.4 for email and 0.2 for IM. In oneimplementation, the count values may map to a frequency coefficientvalue and a weighting may be applied. For example, various count valueranges can map to different communication frequency coefficients (306).For example a count value of 0 may map to a 0 coefficient value, while acount value of 1 to 5 may map to a coefficient value of 0.2. Acoefficient value of 1 may be assigned to a count value of 35 or more.The aggregate communications history coefficient may be a weightedaverage of all component values.

In particular embodiments, the contact-listing process may generate acloseness coefficient for a contact by calculating a sum of the degreeof separation coefficient, the affiliation coefficient, and a weightedaverage of the communication history coefficient (305). In the exampleof contact “Andy” in FIG. 3, the contact-listing process can calculate acloseness coefficient as follows:

closeness coefficient=degree of separation+affiliationcoefficient+weighted average of communication frequencycoefficient=1.0+0.9+AVERAGE(0.6*1.0+0.0*0.8+0.8*0.6+0.4*0.5+0.8*0.4)=2.17

Table 305 show example closeness coefficients or social proximity scoresas calculated by the method above. In other implementations, closenesscoefficients may also include a location-based component that considersthe physical proximity between a user and the contacts. In someimplementations, this can be based on a fixed location, such as mailingor home addresses. In other implementations, this can be based oncurrent locations. Current locations can be based on user check-ins toplaces in a geo-social networking system. U.S. application Ser. No.which is incorporated by reference herein for all purposes discloses anexample geo-social networking system. In one implementation, a weightedcomponent score based on a function that varies with distance can beincluded in the computations discussed above. In this manner, a contactthat is currently in the same location (or a nearby location) may beupranked and presented more readily to the user.

FIG. 4 illustrates an example of presenting to a requesting user acontacts list sorted by closeness coefficients. As in the example ofFIG. 3, the contact-listing process can order the contacts list startingfrom “Andy”, who has the highest closeness coefficients (i.e., closestto the requesting user), followed by “Mom”, “Joe”, and “Lisa”, and thesocial networking system can present the contacts list in the order of“Andy”, “Mom”, “Joe” and “Lisa” to the requesting user. Still further,the closeness coefficients can be used to rank subsets of users. Forexample, an address book application can use the closeness coefficientsto rank a filtered set of contacts. For example, a user may begin totype a name, and a type-ahead process may scan the contacts list formatching names that meet the text string in the text field and rank thematching contacts based on closeness coefficient. A user may also selecta sort key or divider by alphabet to look at the “A” section of theaddress book for contacts having last names. In other implementations,an address book application may identify those contacts having acloseness coefficient above a threshold value and list them in a specialinterface page or section, or list them ahead of an alphabeticallysorted list of contacts.

As a user of the social networking system can keep one or more addressbooks outside the social networking system, in additional to the addressbook stored in user profile database 101, it may be more efficient(e.g., to reduce network traffic between the social networking systemand a remote device) to store a local copy of closeness coefficientswith each address book outside the social networking system. Inparticular embodiments, the contact-listing process may store a localcopy of closeness coefficients in a user's client device 122. In oneembodiment, the contact-listing process may store a local copy of atable of closeness coefficients, a table of communication channelweighting factors, a table of degree of separation coefficients for oneor more contacts, and table of communication history for one or morecontacts, in a storage device of a user's client device 122 (e.g., amicroSD flash memory card in a mobile phone). In particular embodiments,the contact-listing process may store a local copy of closenesscoefficients in a server hosting a user's address book. In oneembodiment, the contact-listing process may store a local copy of atable of closeness coefficients, a table of communication channelweighting factors, a table of degree of separation coefficients for oneor more contacts, and table of communication history for one or morecontacts, in a storage device (e.g., a hard disk drive) of a serverhosting a user's address book, or in a storage device linked to a serverhosting a user's address book. In particular embodiments, a connectionbetween a user and another person may cause the contact-listing processto update a local copy of closeness coefficients. For example, a usermay receive an SMS text message from a contact on a client applicationhosted by the user's mobile phone, and the client application can causethe contact-listing process to calculate and store the closenesscoefficient for the contact locally. For example, a server hosting auser's address book can facilitate a chat session between the user and acontact, then cause the contact-listing process to calculate and storethe closeness coefficient for the contact locally. In particularembodiments, the contact-listing process may present contacts in auser's address book as sorted by locally stored closeness coefficients.

In particular embodiments, the contact-listing process may synchronizeone or more local copies of closeness coefficients with the closenesscoefficients stored in user profile database 101. For example, thecontact-listing process can poll a local copy of closeness coefficientsin a user's mobile phone every Monday at 3 AM, determine changes in thelocal copy and changes in the closeness coefficients stored in userprofile database 101, and update the local copy and the closenesscoefficients stored in user profile database 101 if needed.

While the foregoing embodiments may be implemented in a variety ofnetwork configurations, the following illustrates an example networkenvironment for didactic, and not limiting, purposes. FIG. 5 illustratesan example network environment 500. Network environment 500 includes anetwork 510 coupling one or more servers 520 and one or more clients 530to each other. Network environment 500 also includes one or more datastorage 540 linked to one or more servers 520. Particular embodimentsmay be implemented in network environment 500. For example, socialnetworking system frontend 120 may be written in software programshosted by one or more servers 520. For example, event database 102 maybe stored in one or more storage 540. In particular embodiments, network510 is an intranet, an extranet, a virtual private network (VPN), alocal area network (LAN), a wireless LAN (WLAN), a wide area network(WAN), a metropolitan area network (MAN), a portion of the Internet, oranother network 510 or a combination of two or more such networks 510.The present disclosure contemplates any suitable network 510.

One or more links 550 couple a server 520 or a client 530 to network510. In particular embodiments, one or more links 550 each includes oneor more wired, wireless, or optical links 550. In particularembodiments, one or more links 550 each includes an intranet, anextranet, a VPN, a LAN, a WLAN, a WAN, a MAN, a portion of the Internet,or another link 550 or a combination of two or more such links 550. Thepresent disclosure contemplates any suitable links 550 coupling servers520 and clients 530 to network 510.

In particular embodiments, each server 520 may be a unitary server ormay be a distributed server spanning multiple computers or multipledatacenters. Servers 520 may be of various types, such as, for exampleand without limitation, web server, news server, mail server, messageserver, advertising server, file server, application server, exchangeserver, database server, or proxy server. In particular embodiments,each server 520 may include hardware, software, or embedded logiccomponents or a combination of two or more such components for carryingout the appropriate functionalities implemented or supported by server520. For example, a web server is generally capable of hosting websitescontaining web pages or particular elements of web pages. Morespecifically, a web server may host HTML files or other file types, ormay dynamically create or constitute files upon a request, andcommunicate them to clients 530 in response to HTTP or other requestsfrom clients 530. A mail server is generally capable of providingelectronic mail services to various clients 530. A database server isgenerally capable of providing an interface for managing data stored inone or more data stores.

In particular embodiments, one or more data storages 540 may becommunicatively linked to one or more servers 520 via one or more links550. In particular embodiments, data storages 540 may be used to storevarious types of information. In particular embodiments, the informationstored in data storages 540 may be organized according to specific datastructures. In particular embodiment, each data storage 540 may be arelational database. Particular embodiments may provide interfaces thatenable servers 520 or clients 530 to manage, e.g., retrieve, modify,add, or delete, the information stored in data storage 540.

In particular embodiments, each client 530 may be an electronic deviceincluding hardware, software, or embedded logic components or acombination of two or more such components and capable of carrying outthe appropriate functions implemented or supported by client 530. Forexample and without limitation, a client 530 may be a desktop computersystem, a notebook computer system, a netbook computer system, ahandheld electronic device, or a mobile telephone. The presentdisclosure contemplates any suitable clients 530. A client 530 mayenable a network user at client 530 to access network 530. A client 530may enable its user to communicate with other users at other clients530.

A client 530 may have a web browser 532, such as MICROSOFT INTERNETEXPLORER, GOOGLE CHROME or MOZILLA FIREFOX, and may have one or moreadd-ons, plug-ins, or other extensions, such as TOOLBAR or YAHOOTOOLBAR. A user at client 530 may enter a Uniform Resource Locator (URL)or other address directing the web browser 532 to a server 520, and theweb browser 532 may generate a Hyper Text Transfer Protocol (HTTP)request and communicate the HTTP request to server 520. Server 520 mayaccept the HTTP request and communicate to client 530 one or more HyperText Markup Language (HTML) files responsive to the HTTP request. Client530 may render a web page based on the HTML files from server 520 forpresentation to the user. The present disclosure contemplates anysuitable web page files. As an example and not by way of limitation, webpages may render from HTML files, Extensible Hyper Text Markup Language(XHTML) files, or Extensible Markup Language (XML) files, according toparticular needs. Such pages may also execute scripts such as, forexample and without limitation, those written in JAVASCRIPT, JAVA,MICROSOFT SILVERLIGHT, combinations of markup language and scripts suchas AJAX (Asynchronous JAVASCRIPT and XML), and the like. Herein,reference to a web page encompasses one or more corresponding web pagefiles (which a browser may use to render the web page) and vice versa,where appropriate.

FIG. 6 illustrates an example computer system 600, which may be usedwith some embodiments of the present invention. This disclosurecontemplates any suitable number of computer systems 600. Thisdisclosure contemplates computer system 600 taking any suitable physicalform. As example and not by way of limitation, computer system 600 maybe an embedded computer system, a system-on-chip (SOC), a single-boardcomputer system (SBC) (such as, for example, a computer-on-module (COM)or system-on-module (SOM)), a desktop computer system, a laptop ornotebook computer system, an interactive kiosk, a mainframe, a mesh ofcomputer systems, a mobile telephone, a personal digital assistant(PDA), a server, or a combination of two or more of these. Whereappropriate, computer system 600 may include one or more computersystems 600; be unitary or distributed; span multiple locations; spanmultiple machines; or reside in a cloud, which may include one or morecloud components in one or more networks. Where appropriate, one or morecomputer systems 600 may perform without substantial spatial or temporallimitation one or more steps of one or more methods described orillustrated herein. As an example and not by way of limitation, one ormore computer systems 600 may perform in real time or in batch mode oneor more steps of one or more methods described or illustrated herein.One or more computer systems 600 may perform at different times or atdifferent locations one or more steps of one or more methods describedor illustrated herein, where appropriate.

In particular embodiments, computer system 600 includes a processor 602,memory 602, storage 606, an input/output (I/O) interface 608, acommunication interface 610, and a bus 612. Although this disclosuredescribes and illustrates a particular computer system having aparticular number of particular components in a particular arrangement,this disclosure contemplates any suitable computer system having anysuitable number of any suitable components in any suitable arrangement.

In particular embodiments, processor 602 includes hardware for executinginstructions, such as those making up a computer program. As an exampleand not by way of limitation, to execute instructions, processor 602 mayretrieve (or fetch) the instructions from an internal register, aninternal cache, memory 602, or storage 606; decode and execute them; andthen write one or more results to an internal register, an internalcache, memory 602, or storage 606. In particular embodiments, processor602 may include one or more internal caches for data, instructions, oraddresses. The present disclosure contemplates processor 602 includingany suitable number of any suitable internal caches, where appropriate.As an example and not by way of limitation, processor 602 may includeone or more instruction caches, one or more data caches, and one or moretranslation look-aside buffers (TLBs). Instructions in the instructioncaches may be copies of instructions in memory 602 or storage 606, andthe instruction caches may speed up retrieval of those instructions byprocessor 602. Data in the data caches may be copies of data in memory602 or storage 606 for instructions executing at processor 602 tooperate on; the results of previous instructions executed at processor602 for access by subsequent instructions executing at processor 602 orfor writing to memory 602 or storage 606; or other suitable data. Thedata caches may speed up read or write operations by processor 602. TheTLBs may speed up virtual-address translation for processor 602. Inparticular embodiments, processor 602 may include one or more internalregisters for data, instructions, or addresses. The present disclosurecontemplates processor 602 including any suitable number of any suitableinternal registers, where appropriate. Where appropriate, processor 602may include one or more arithmetic logic units (ALUs); be a multi-coreprocessor; or include one or more processors 602. Although thisdisclosure describes and illustrates a particular processor, thisdisclosure contemplates any suitable processor.

In particular embodiments, memory 602 includes main memory for storinginstructions for processor 602 to execute or data for processor 602 tooperate on. As an example and not by way of limitation, computer system600 may load instructions from storage 606 or another source (such as,for example, another computer system 600) to memory 602. Processor 602may then load the instructions from memory 602 to an internal registeror internal cache. To execute the instructions, processor 602 mayretrieve the instructions from the internal register or internal cacheand decode them. During or after execution of the instructions,processor 602 may write one or more results (which may be intermediateor final results) to the internal register or internal cache. Processor602 may then write one or more of those results to memory 602. Inparticular embodiments, processor 602 executes only instructions in oneor more internal registers or internal caches or in memory 602 (asopposed to storage 606 or elsewhere) and operates only on data in one ormore internal registers or internal caches or in memory 602 (as opposedto storage 606 or elsewhere). One or more memory buses (which may eachinclude an address bus and a data bus) may couple processor 602 tomemory 602. Bus 612 may include one or more memory buses, as describedbelow. In particular embodiments, one or more memory management units(MMUs) reside between processor 602 and memory 602 and facilitateaccesses to memory 602 requested by processor 602. In particularembodiments, memory 602 includes random access memory (RAM). This RAMmay be volatile memory, where appropriate Where appropriate, this RAMmay be dynamic RAM (DRAM) or static RAM (SRAM). Moreover, whereappropriate, this RAM may be single-ported or multi-ported RAM. Thepresent disclosure contemplates any suitable RAM. Memory 602 may includeone or more memories 602, where appropriate. Although this disclosuredescribes and illustrates particular memory, this disclosurecontemplates any suitable memory.

In particular embodiments, storage 606 includes mass storage for data orinstructions. As an example and not by way of limitation, storage 606may include an HDD, a floppy disk drive, flash memory, an optical disc,a magneto-optical disc, magnetic tape, or a Universal Serial Bus (USB)drive or a combination of two or more of these. Storage 606 may includeremovable or non-removable (or fixed) media, where appropriate. Storage606 may be internal or external to computer system 600, whereappropriate. In particular embodiments, storage 606 is non-volatile,solid-state memory. In particular embodiments, storage 606 includesread-only memory (ROM). Where appropriate, this ROM may bemask-programmed ROM, programmable ROM (PROM), erasable PROM (EPROM),electrically erasable PROM (EEPROM), electrically alterable ROM (EAROM),or flash memory or a combination of two or more of these. Thisdisclosure contemplates mass storage 606 taking any suitable physicalform. Storage 606 may include one or more storage control unitsfacilitating communication between processor 602 and storage 606, whereappropriate. Where appropriate, storage 606 may include one or morestorages 606. Although this disclosure describes and illustratesparticular storage, this disclosure contemplates any suitable storage.

In particular embodiments, I/O interface 608 includes hardware,software, or both providing one or more interfaces for communicationbetween computer system 600 and one or more I/O devices. Computer system600 may include one or more of these I/O devices, where appropriate. Oneor more of these I/O devices may enable communication between a personand computer system 600. As an example and not by way of limitation, anI/O device may include a keyboard, keypad, microphone, monitor, mouse,printer, scanner, speaker, still camera, stylus, tablet, touch screen,trackball, video camera, another suitable I/O device or a combination oftwo or more of these. An I/O device may include one or more sensors.This disclosure contemplates any suitable I/O devices and any suitableI/O interfaces 608 for them. Where appropriate, I/O interface 608 mayinclude one or more device or software drivers enabling processor 602 todrive one or more of these I/O devices. I/O interface 608 may includeone or more I/O interfaces 608, where appropriate. Although thisdisclosure describes and illustrates a particular I/O interface, thisdisclosure contemplates any suitable I/O interface.

In particular embodiments, communication interface 610 includeshardware, software, or both providing one or more interfaces forcommunication (such as, for example, packet-based communication) betweencomputer system 600 and one or more other computer systems 600 or one ormore networks. As an example and not by way of limitation, communicationinterface 610 may include a network interface controller (NIC) ornetwork adapter for communicating with an Ethernet or other wire-basednetwork or a wireless NIC (WNIC) or wireless adapter for communicatingwith a wireless network, such as a WI-FI network. This disclosurecontemplates any suitable network and any suitable communicationinterface 610 for it. As an example and not by way of limitation,computer system 600 may communicate with an ad hoc network, a personalarea network (PAN), a local area network (LAN), a wide area network(WAN), a metropolitan area network (MAN), or one or more portions of theInternet or a combination of two or more of these. One or more portionsof one or more of these networks may be wired or wireless. As anexample, computer system 600 may communicate with a wireless PAN (WPAN)(such as, for example, a BLUETOOTH WPAN), a WI-FI network, a WI-MAXnetwork, a cellular telephone network (such as, for example, a GlobalSystem for Mobile Communications (GSM) network), or other suitablewireless network or a combination of two or more of these. Computersystem 600 may include any suitable communication interface 610 for anyof these networks, where appropriate. Communication interface 610 mayinclude one or more communication interfaces 610, where appropriate.Although this disclosure describes and illustrates a particularcommunication interface, this disclosure contemplates any suitablecommunication interface.

In particular embodiments, bus 612 includes hardware, software, or bothcoupling components of computer system 600 to each other. As an exampleand not by way of limitation, bus 612 may include an AcceleratedGraphics Port (AGP) or other graphics bus, an Enhanced Industry StandardArchitecture (EISA) bus, a front-side bus (FSB), a HYPERTRANSPORT (HT)interconnect, an Industry Standard Architecture (ISA) bus, an INFINIBANDinterconnect, a low-pin-count (LPC) bus, a memory bus, a Micro ChannelArchitecture (MCA) bus, a Peripheral Component Interconnect (PCI) bus, aPCI-Express (PCI-X) bus, a serial advanced technology attachment (SATA)bus, a Video Electronics Standards Association local (VLB) bus, oranother suitable bus or a combination of two or more of these. Bus 612may include one or more buses 612, where appropriate. Although thisdisclosure describes and illustrates a particular bus, this disclosurecontemplates any suitable bus or interconnect.

Herein, reference to a computer-readable storage medium encompasses oneor more non-transitory, tangible computer-readable storage mediapossessing structure. As an example and not by way of limitation, acomputer-readable storage medium may include a semiconductor-based orother integrated circuit (IC) (such, as for example, afield-programmable gate array (FPGA) or an application-specific IC(ASIC)), a hard disk, an HDD, a hybrid hard drive (HHD), an opticaldisc, an optical disc drive (ODD), a magneto-optical disc, amagneto-optical drive, a floppy disk, a floppy disk drive (FDD),magnetic tape, a holographic storage medium, a solid-state drive (SSD),a RAM-drive, a SECURE DIGITAL card, a SECURE DIGITAL drive, or anothersuitable computer-readable storage medium or a combination of two ormore of these, where appropriate. Herein, reference to acomputer-readable storage medium excludes any medium that is noteligible for patent protection under 35 U.S.C. §101. Herein, referenceto a computer-readable storage medium excludes transitory forms ofsignal transmission (such as a propagating electrical or electromagneticsignal per se) to the extent that they are not eligible for patentprotection under 35 U.S.C. §101.

This disclosure contemplates one or more computer-readable storage mediaimplementing any suitable storage. In particular embodiments, acomputer-readable storage medium implements one or more portions ofprocessor 602 (such as, for example, one or more internal registers orcaches), one or more portions of memory 602, one or more portions ofstorage 606, or a combination of these, where appropriate. In particularembodiments, a computer-readable storage medium implements RAM or ROM.In particular embodiments, a computer-readable storage medium implementsvolatile or persistent memory. In particular embodiments, one or morecomputer-readable storage media embody software. Herein, reference tosoftware may encompass one or more applications, bytecode, one or morecomputer programs, one or more executables, one or more instructions,logic, machine code, one or more scripts, or source code, and viceversa, where appropriate. In particular embodiments, software includesone or more application programming interfaces (APIs). This disclosurecontemplates any suitable software written or otherwise expressed in anysuitable programming language or combination of programming languages.In particular embodiments, software is expressed as source code orobject code. In particular embodiments, software is expressed in ahigher-level programming language, such as, for example, C, Perl, or asuitable extension thereof. In particular embodiments, software isexpressed in a lower-level programming language, such as assemblylanguage (or machine code). In particular embodiments, software isexpressed in JAVA. In particular embodiments, software is expressed inHyper Text Markup Language (HTML), Extensible Markup Language (XML), orother suitable markup language.

The present disclosure encompasses all changes, substitutions,variations, alterations, and modifications to the example embodimentsherein that a person having ordinary skill in the art would comprehend.Similarly, where appropriate, the appended claims encompass all changes,substitutions, variations, alterations, and modifications to the exampleembodiments herein that a person having ordinary skill in the art wouldcomprehend.

What is claimed is:
 1. A method comprising: by one or more computingdevices, accessing a contacts list comprising one or more contacts in anaddress book of a first user; by one or more computing devices,accessing a data store for existing social-graph information betweeneach contact in the contacts list and the first user; by one or morecomputing devices, accessing communication-history information for eachcontact in the contacts list, the communication-history information fora contact indicating a frequency of communication between the first userand the contact; by one or more computing devices, determining asocial-proximity score for each contact in the contacts list based atleast in part on the social-graph information, communication-historyinformation, and one or more user-declared relationship types betweenthe first user and other contacts of the contacts list; by one or morecomputing devices, sending the social-proximity scores for the contactsin the contacts list to a client device associated with the first user,wherein a ranked list of the contacts displayed on the client device isdetermined based at least in part on the social-proximity scores.
 2. Themethod of claim 1, wherein the social-graph information comprises adegree-of-separation coefficient for each contact in the contacts listwith respect to the first user.
 3. The method of claim 1, wherein thesocial-graph information comprises an affiliation coefficient for eachcontact in the contacts list with respect to the first user.
 4. Themethod of claim 1, wherein accessing the communication-historyinformation for each contact in the contacts list comprises: accessing adata store of communication history; and determining a usage frequencyfor each of one or more communication channels for the contact.
 5. Themethod of claim 4, wherein the social-graph information comprises (1) adegree-of-separation coefficient for each contact in the contacts listwith respect to the first user and (2) an affiliation coefficient foreach contact in the contacts list with respect to the first user.
 6. Themethod of claim 5, the method further comprising: accessing a weightingfactor for each of the communication channels, wherein thesocial-proximity score for each contact in the contacts list is based ona summation of the degree-of-separation coefficient, the affiliationcoefficient, and the weighted average of the usage frequency of thecommunication channels, and wherein the weighted average is calculatedwith the weighting factor for each of the communication channels.
 7. Themethod of claim 1, the method further comprising periodicallysynchronizing a local copy of the social-proximity scores with aserver-side copy of the social-proximity scores by: polling the clientdevice to determine changes to the local copy since the copies of thesocial-proximity scores were last synchronized; determining changes tothe server-side copy since the copies of the social-proximity scoreswere last synchronized; updating the server-side copy based on thedetermined changes to the local copy; and sending information to theclient device to update the local copy based on the determined changesto the server-side copy.
 8. A system comprising: one or more processors;and a memory coupled to the processors comprising instructionsexecutable by the processors, the processors being operable whenexecuting the instructions to: access a contacts list comprising one ormore contacts in an address book of a first user; access a data storefor existing social-graph information between each contact in thecontacts list and the first user; access communication-historyinformation for each contact in the contacts list, thecommunication-history information for a contact indicating a frequencyof communication between the first user and the contact; determine asocial-proximity score for each contact in the contacts list based atleast in part on the social-graph information, a-weighted average of theusage frequency of each of the communication channels, and one or moreuser-declared relationship types between the first user and othercontacts of the contacts list; by one or more computing devices, sendingthe social-proximity scores for the contacts in the contacts list to aclient device associated with the first user, wherein a ranked list ofthe contacts displayed on the client device is determined based at leastin part on the social-proximity scores.
 9. The system of claim 8,wherein the social-graph information comprises a degree-of-separationcoefficient for each contact in the contacts list with respect to thefirst user.
 10. The system of claim 8, wherein the social-graphinformation comprises an affiliation coefficient for each contact in thecontacts list with respect to the first user.
 11. The system of claim 8,wherein the processors being operable when executing the instructions toaccess the communication-history information for each contact in thecontacts list comprises the processors being operable to: access a datastore of communication history; and determine a usage frequency for eachof one or more communication channels for the contact.
 12. The system ofclaim 11, wherein the social-graph information comprises (1) adegree-of-separation coefficient for each contact in the contacts listwith respect to the first user and (2) an affiliation coefficient foreach contact in the contacts list with respect to the first user. 13.The system of claim 12, wherein the processors are further operable whenexecuting the instructions to: access a weighting factor for each of thecommunication channels, wherein the social-proximity score for eachcontact in the contacts list is based on a summation of thedegree-of-separation coefficient, the affiliation coefficient, and theweighted average of the usage frequency of the communication channels,and wherein the weighted average is calculated with the weighting factorfor each of the communication channels.
 14. The system of claim 8,wherein the processors are further operable when executing theinstructions to periodically synchronize a local copy of thesocial-proximity scores with a server-side copy of the social-proximityscores by: polling the client device to determine changes to the localcopy since the copies of the social-proximity scores were lastsynchronized; determining changes to the server-side copy since thecopies of the social-proximity scores were last synchronized; updatingthe server-side copy based on the determined changes to the local copy;and sending information to the client device to update the local copybased on the determined changes to the server-side copy.
 15. One or morecomputer-readable non-transitory storage media embodying software thatis operable when executed to: access a contacts list comprising one ormore contacts in an address book of a first user; access a data storefor existing social-graph information between each contact in thecontacts list and the first user; access communication-historyinformation for each contact in the contacts list, thecommunication-history information for a contact indicating a frequencyof communication between the first user and the contact; determine asocial-proximity score for each contact in the contacts list based atleast in part on the social-graph information, a weighted average of theusage frequency of each of the communication channels, and one or moreuser-declared relationship types between the first user and othercontacts of the contacts list; send the social-proximity scores for thecontacts in the contacts list to a client device associated with thefirst user, wherein a ranked list of the contacts displayed on theclient device is determined based at least in part on thesocial-proximity scores.
 16. The media of claim 15, wherein thesocial-graph information comprises a degree-of-separation coefficientfor each contact in the contacts list with respect to the first user.17. The media of claim 15, wherein the social-graph informationcomprises an affiliation coefficient for each contact in the contactslist with respect to the first user.
 18. The media of claim 15, whereinthe software operable when executed to access the communication-historyinformation for each contact in the contacts list comprises softwarethat is operable when executed to: access a data store of communicationhistory; and determine a usage frequency for each of one or morecommunication channels for the contact.
 19. The media of claim 18,wherein the social-graph information comprises (1) adegree-of-separation coefficient for each contact in the contacts listwith respect to the first user and (2) an affiliation coefficient foreach contact in the contacts list with respect to the first user, andwherein the software is further operable when executed to: access aweighting factor for each of the communication channels, wherein thesocial-proximity score for each contact in the contacts list is based ona summation of the degree-of-separation coefficient, the affiliationcoefficient, and the weighted average of the usage frequency of thecommunication channels, wherein the weighted average is calculated withthe weighting factor for each of the communication channels.
 20. Themedia of claim 15, wherein the software is further operable whenexecuted to periodically synchronize a local copy of thesocial-proximity scores with a server-side copy of the social-proximityscores by: polling the client device to determine changes to the localcopy since the copies of the social-proximity scores were lastsynchronized; determining changes to the server-side copy since thecopies of the social-proximity scores were last synchronized; updatingthe server-side copy based on the determined changes to the local copy;and sending information to the client device to update the local copybased on the determined changes to the server-side copy.